home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / mswlogo3.zip / MSWLOGO.ZIP / EXAMPLES.ZIP / PSORT.PAS < prev    next >
Pascal/Delphi Source File  |  1991-09-22  |  2KB  |  78 lines

  1. PROGRAM PSORT(OUTPUT);
  2.  {PARTITION SORT DEMO}
  3.  
  4. VAR DATA: ARRAY [-1..99] OF INTEGER;
  5.     I: INTEGER;
  6.  
  7. PROCEDURE SHOWDATA;
  8.  {PRINT THE ARRAY}
  9.  
  10.    VAR I: INTEGER;
  11.  
  12.    BEGIN {SHOWDATA}
  13.       FOR I := 0 TO 99 DO
  14.          BEGIN
  15.             IF I MOD 20 = 0 THEN WRITELN;
  16.             WRITE(DATA[I]:3)
  17.          END;
  18.       WRITELN;
  19.       WRITELN
  20.    END; {SHOWDATA}
  21.  
  22. PROCEDURE SORT(LOWER,UPPER:INTEGER);
  23.  {SORT PART OF THE ARRAY}
  24.  
  25.    VAR KEY,I,J:INTEGER;
  26.  
  27.    PROCEDURE EXCH(VAR A,B:INTEGER);
  28.     {EXCHANGE TWO INTEGERS}
  29.  
  30.       VAR TEMP:INTEGER;
  31.  
  32.       BEGIN {EXCH}
  33.          TEMP := A;
  34.          A := B;
  35.          B := TEMP
  36.       END; {EXCH}
  37.  
  38.    BEGIN {SORT}
  39.       IF UPPER > LOWER THEN
  40.          BEGIN
  41.             I := LOWER;
  42.             J := UPPER;
  43.             KEY := (DATA[LOWER]+DATA[UPPER]) DIV 2;
  44.             WHILE I < J DO
  45.                BEGIN
  46.                   WHILE DATA[I] < KEY DO
  47.                      I := I+1;
  48.                   IF I < J THEN
  49.                      BEGIN
  50.                         EXCH(DATA[I],DATA[J]);
  51.                         REPEAT
  52.                            J := J-1
  53.                         UNTIL DATA[J] <= KEY
  54.                      END;
  55.                   IF I < J THEN
  56.                      BEGIN
  57.                         EXCH(DATA[I],DATA[J]);
  58.                         I := I+1
  59.                      END
  60.                END;
  61.             IF DATA[J] > KEY THEN J := J-1;
  62.             SORT(LOWER,J);
  63.             SORT(J+1,UPPER)
  64.          END
  65.    END; {SORT}
  66.  
  67. BEGIN {MAIN PROGRAM}
  68.    DATA[-1] := -1;
  69.    FOR I := 0 TO 99 DO
  70.       DATA[I] := RANDOM(100);
  71.    WRITELN('DATA BEFORE SORTING:');
  72.    SHOWDATA;
  73.  
  74.    SORT(0,99);
  75.    WRITELN('DATA AFTER SORTING:');
  76.    SHOWDATA
  77. END.
  78.